#include "app_runner.h"
#include <signal.h>
#include "app_device.h"
#include "app_mqtt.h"
#include "app_pool.h"
#include "app_bt.h"
#include "app_serial.h"
#include "log.h"
#include <unistd.h>

static int is_running = 1;
void app_runner_stop_handler(int sig)
{
    is_running = 0;
}

/**
 *  @brief 主程序的运行
 */

int app_runner_run()
{
    // 0 对停止信号的注册  注册回调函数
    //  两种信号  1 结束 kill   2 中止  ctrl+c     3  kill -9 无法在程序中接收
    signal(SIGTERM, app_runner_stop_handler); // 1 结束 kill
    signal(SIGINT, app_runner_stop_handler);  // 2 中止  ctrl+c

    // 1 各种初始化
    int ret = app_mqtt_init();
    if (ret == 0)
    {
        log_info("mqtt init success");
    }
    app_pool_init();
    if (ret == 0)
    {
        log_info("pool init success");
    }
    app_device_t *device = app_device_init();
    if (device != NULL)
    {
        log_info("device init success");
    }
    ret = app_serial_init(device);
    if (ret == 0)
    {
        log_info("serial init success");
    }

    ret = app_bt_init(device);
    if (ret == 0)
    {
        log_info("bt init success");
    }

    // 2  启动设备 （上下行 数据通路启动）
    app_device_start(device);
    log_info("设备启动成功");
    // 3  把进程hang住 死循环
    while (is_running)
    {
        sleep(1);
    }

    // 4  执行销毁
    log_info("开始释放资源");
    app_device_destroy();
    app_mqtt_destroy();
    app_pool_destroy();
    log_info("程序退出");
    return 0;
}